/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package src.j2ee.compumake.controladores;

import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import src.j2ee.compumake.builders.BuilderZonas;
import src.j2ee.compumake.dao.DAOSucursal;
import src.j2ee.compumake.dao.DAOZonas;
import src.j2ee.compumake.dominio.Producto;
import src.j2ee.compumake.dominio.Sucursal;
import src.j2ee.compumake.dominio.Zona;

/**
 *
 * @author Eric
 */
public class ControladorDeCompatibilidad extends HttpServlet {

    @Override
    public void init(ServletConfig config) throws ServletException {
        servletContext = config.getServletContext();
    }
    
    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        ArrayList<Producto> listaDeProductosCompatibles = new ArrayList();
        int idTarjetaMadre;
        
        HttpSession session = request.getSession(true);
        if(session.getAttribute("idTarjeta") == null){
            idTarjetaMadre = Integer.parseInt(request.getParameter("tarjetaMadre"));
            session.setAttribute("idTarjeta", idTarjetaMadre);
        }
        else{
            idTarjetaMadre = Integer.parseInt(session.getAttribute("idTarjeta").toString());
        }
        
        int codigoDeCompatibilidad = Integer.parseInt(request.getParameter("codigo"));
        if(codigoDeCompatibilidad > 2){
            switch(codigoDeCompatibilidad){
                case 3:
                    int idProcesador = Integer.parseInt(request.getParameter("idProcesador"));
                    session.setAttribute("idProcesador", idProcesador);
                    break;
                case 4:
                    int idMemoria = Integer.parseInt(request.getParameter("idMemoria"));
                    session.setAttribute("idMemoria", idMemoria);
                    break;
                case 5:
                    int idUnidadOptica = Integer.parseInt(request.getParameter("idUnidadOptica"));
                    session.setAttribute("idUnidadOptica", idUnidadOptica);
                    break;
                case 6:
                    int idTeclado = Integer.parseInt(request.getParameter("idTeclado"));
                    session.setAttribute("idTeclado", idTeclado);
                    break;
                case 7:
                    int idMouse = Integer.parseInt(request.getParameter("idMouse"));
                    session.setAttribute("idMouse", idMouse);
                    break;
                case 8:
                    int idTarjetaVideo = Integer.parseInt(request.getParameter("idTarjetaVideo"));
                    session.setAttribute("idTarjetaVideo", idTarjetaVideo);
                    break;
                case 9:
                    int idMonitor = Integer.parseInt(request.getParameter("idMonitor"));
                    session.setAttribute("idMonitor", idMonitor);
                    break;
            }
        }
        
        if(codigoDeCompatibilidad != 10){
            request.setAttribute("idTarjeta", idTarjetaMadre);
            request.setAttribute("tipoComponente", codigoDeCompatibilidad);

            RequestDispatcher dispatcher = servletContext.getRequestDispatcher("/ConstructorPCServlet");

            if (dispatcher != null) {
                dispatcher.include(request, response);
            }
            else{
                System.out.println("No se ha encontrado el servlet indicado");
            }

            listaDeProductosCompatibles = (ArrayList<Producto>) request.getAttribute("compatibles");

            contenidoRespuestaAjax = construirTablaDeProductos(listaDeProductosCompatibles, codigoDeCompatibilidad);
        }
        else{
            int idGabinete = Integer.parseInt(request.getParameter("idGabinete"));
            session.setAttribute("idGabinete", idGabinete);
            
            contenidoRespuestaAjax = "¡Felicidades, ha terminado de construir su computadora!";
            contenidoRespuestaAjax += "<form name=\"registroPeticion\" action=\"RegistroPeticion\" method=\"post\"><tr>"
                                    + "<td class=\"productos\" width=\"150\" height=\"150\">"
                                        + "<input type=\"submit\" value=\"Hacer pedido\"><br>"
                                    + "</td></tr>";
            contenidoRespuestaAjax += "¿En que zona quiere pasar a recoger su pedido?" + ControladorDeCompatibilidad.obtenerComboSucursal();
            contenidoRespuestaAjax += "</form>";
            
            
        }
        
        response.setContentType("application/xml");
        response.getWriter().write(contenidoRespuestaAjax);
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private String construirTablaDeProductos(ArrayList<Producto> listaDeProductosCompatibles, int codigo){
        
        String tablaDeTarjetasMadre = "No se encontraron productos compatibles :'(";
        
        if(!listaDeProductosCompatibles.isEmpty()){
            tablaDeTarjetasMadre = "<table>";
            String URLImagen;
            for(int i=0; i<listaDeProductosCompatibles.size(); i++){
                Producto producto = listaDeProductosCompatibles.get(i);
                if(producto.getRutaImagen().isEmpty()){
                    URLImagen = "Fotos/noDisponible.jpg";
                }
                else{
                    URLImagen = producto.getRutaImagen();
                }
                tablaDeTarjetasMadre += "<tr>"
                                    + "<td><img src=\"" + URLImagen + "\" width=\"150\" height=\"150\"></td>"
                                    + "<td width=\"200\" height=\"150\">"
                                        + "<table cellspacing=\"2\" cellpadding=\"2\">"
                                            + "<tr><td>Nombre:</td><td>" + producto.getNombre() + "</td></tr>"
                                            + "<tr><td>Marca:</td><td>" + producto.getMarca().getNombre() + "</td></tr>"
                                            + "<tr><td>Precio:</td><td>$" + producto.getPrecio() + "</td></tr>"
                                        + "</table>"
                                    + "</td>"
                                    + "<td class=\"productos\" width=\"150\" height=\"150\">"
                                        + "<input type=\"radio\" name=\"group1\" value=\"" + producto.getClave() + "\"><br>"
                                    + "</td></tr>";
            }
            
            switch(codigo){
                case 2:
                    tablaDeTarjetasMadre += "<tr><td><input type=\"button\" value=\"Siguiente\" id=\"PedirProducto\"></tr>";
                    tablaDeTarjetasMadre += "<input type=\"hidden\" name=\"tipoDeProducto\" value=\"Procesador\" id=\"tipoDeProducto\" class=\"tipoDeProducto\">";
                    break;
                case 3:
                    tablaDeTarjetasMadre += "<tr><td><input type=\"button\" value=\"Siguiente\" id=\"PedirProducto\"></tr>";
                    tablaDeTarjetasMadre += "<input type=\"hidden\" name=\"tipoDeProducto\" value=\"Memoria\" id=\"tipoDeProducto\" class=\"tipoDeProducto\">";
                    break;
                case 4:
                    tablaDeTarjetasMadre += "<tr><td><input type=\"button\" value=\"Siguiente\" id=\"PedirProducto\"></tr>";
                    tablaDeTarjetasMadre += "<input type=\"hidden\" name=\"tipoDeProducto\" value=\"UnidadOptica\" id=\"tipoDeProducto\" class=\"tipoDeProducto\">";
                    break;
                case 5:
                    tablaDeTarjetasMadre += "<tr><td><input type=\"button\" value=\"Siguiente\" id=\"PedirProducto\"></tr>";
                    tablaDeTarjetasMadre += "<input type=\"hidden\" name=\"tipoDeProducto\" value=\"Teclado\" id=\"tipoDeProducto\" class=\"tipoDeProducto\">";
                    break;
                case 6:
                    tablaDeTarjetasMadre += "<tr><td><input type=\"button\" value=\"Siguiente\" id=\"PedirProducto\"></tr>";
                    tablaDeTarjetasMadre += "<input type=\"hidden\" name=\"tipoDeProducto\" value=\"Mouse\" id=\"tipoDeProducto\" class=\"tipoDeProducto\">";
                    break;
                case 7:
                    tablaDeTarjetasMadre += "<tr><td><input type=\"button\" value=\"Siguiente\" id=\"PedirProducto\"></tr>";
                    tablaDeTarjetasMadre += "<input type=\"hidden\" name=\"tipoDeProducto\" value=\"TarjetaVideo\" id=\"tipoDeProducto\" class=\"tipoDeProducto\">";
                    break;
                case 8:
                    tablaDeTarjetasMadre += "<tr><td><input type=\"button\" value=\"Siguiente\" id=\"PedirProducto\"></tr>";
                    tablaDeTarjetasMadre += "<input type=\"hidden\" name=\"tipoDeProducto\" value=\"Monitor\" id=\"tipoDeProducto\" class=\"tipoDeProducto\">";
                    break;
                case 9:
                    tablaDeTarjetasMadre += "<tr><td><input type=\"button\" value=\"Siguiente\" id=\"PedirProducto\"></tr>";
                    tablaDeTarjetasMadre += "<input type=\"hidden\" name=\"tipoDeProducto\" value=\"Gabinete\" id=\"tipoDeProducto\" class=\"tipoDeProducto\">";
                    break;
            }
            tablaDeTarjetasMadre += "</table>";
        }
        
        return tablaDeTarjetasMadre;
        
    }
    
    public static String obtenerComboSucursal(){
        String comboBoxSucursales = "<td>"+
                "<select name=\"sucursal\">"+
                crearOpciones()+
                "</select>"+
                "</td>";
        
        return comboBoxSucursales;
    }
    
    private static String crearOpciones(){
        
        DAOSucursal daoSucursal = new DAOSucursal();
        ArrayList<Sucursal> listaDeSucursales= new ArrayList<>();
        listaDeSucursales = daoSucursal.listarSucursales();
        
        String opciones = "";
        
        for(int i=0; i<listaDeSucursales.size(); i++){
            Sucursal sucursal = listaDeSucursales.get(i);
            opciones = opciones + "<option value=\"" + sucursal.getNombre() + "\">" + sucursal.getNombre() + "</option>";
        }
        
        return opciones;
    }
    
    private ServletContext servletContext;
    private String contenidoRespuestaAjax = "";
    
    private static final int codigoCompatibilidadProcesador = 2;
    private static final int codigoCompatibilidadMemoria = 3;
    private static final int codigoCompatibilidadUnidadOptica = 4;
    private static final int codigoCompatibilidadTeclado = 5;
    private static final int codigoCompatibilidadMouse = 6;
    private static final int codigoCompatibilidadTarjetaDeVideo = 7;
    private static final int codigoCompatibilidadMonitor = 8;
    private static final int codigoCompatibilidadGabinete = 9;
    
}
